home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 41 / Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso / -seriously_amiga- / programming / other / gui4cli / ext / gcsound / gcsound.gc < prev    next >
Text File  |  1999-04-29  |  17KB  |  659 lines

  1. G4C
  2.  
  3. WINBIG 40 11 233 220 'GCSound 8SVX Player'
  4. WinType 11110001
  5.  
  6. ; ===============================================================
  7. ;       general events
  8. ; ===============================================================
  9.  
  10. xOnLoad
  11.    mode = DIR                             ; can be SAMPLE or DIR
  12.    selswitch = 0                          ; delect/deselect dir lv switch
  13.    setgad #this 10 hide                   ; hide the samples lv
  14.    setgad gcsound.gc 2 HIDE               ; and it's text box
  15.    extract gcsound.gc guipath mypath      ; save lists of files -
  16.    JoinFile $mypath Lists prefs           ; in my dir/Lists
  17.    joinfile $prefs List_1 prefs
  18.    GuiOpen #this
  19.    name = ''                              ; set these for safety
  20.    volume = 64
  21.    speed = -1
  22.    times = 0
  23.    status = IDLE
  24.    setwin = CLOSED
  25.    gcsound.set/oldspeed = -1
  26.    lvuse gcsound.gc 1
  27.    setwintitle #this '$$lv.dir'
  28.    run 'guis:ext/gcsound/gcsound'         ; load extension
  29.  
  30. xOnClose
  31.    guiclose #this
  32.    setgad #this 5 on                      ; appicon on
  33.  
  34. xOnQuit
  35.    guiquit gcsound.pop
  36.    guiquit gcsound.set
  37.    call gcsound quit
  38.  
  39. xOnRMB
  40.    if $mode = SAMPLE
  41.       guiopen gcsound.pop
  42.    else
  43.       ; dir mode - quit any playing sounds
  44.       call gcsound stop ; stop all sounds
  45.    endif
  46.  
  47. xOnFail
  48.    guiwindow #this resume
  49.  
  50. xAppicon -1 -1 :gcsound.gc 'GCSound' '' OFF
  51.    gadid 5
  52.    guiopen #this
  53.    setgad #this 5 off
  54.  
  55. ; ===============================================================
  56. ;       the dir listview
  57. ; ===============================================================
  58.  
  59. XLISTVIEW 0 0 211 221 "" file "" 0 DIR
  60.    gadid 1
  61.    gadfont #mono 8 000
  62.    ;LVColors   2 1 3 2        ; uncomment this line for genlocking
  63.    ; on choosing a file by double click, play it..
  64.    if $file H= 'FORM????8SVX'
  65.       call gcsound sound $file 0 64 -1
  66.    ELSE
  67.       guiload guis:tools/rtn/filepop $file
  68.    endif
  69.  
  70. xlvdirhook 1
  71.    setwintitle #this '$$lv.dir'
  72.  
  73. ; ===============================================================
  74. ;       the samples listview - (should make it DBase)
  75. ; ===============================================================
  76.  
  77. XLISTVIEW 0 0 211 220 "" sample t:soundtemp 5 MULTI
  78.    gadid 10
  79.    gadfont #mono 8 000
  80.    ;LVColors   2 1 3 2        ; uncomment this line for genlocking
  81.  
  82.    gosub gcsound.gc splitline '$sample'
  83.    if $status = LOAD
  84.       call gcsound play $name $times $volume $speed
  85.       status = PLAY
  86.       gosub gcsound.gc joinline
  87.       lvput '$rec'
  88.    elseif $status = IDLE
  89.       call gcsound load $path $name
  90.       call gcsound play $name $times $volume $speed
  91.       status = PLAY
  92.       gosub gcsound.gc joinline
  93.       lvput '$rec'
  94.    endif
  95.    lvsort ASC
  96.  
  97. ; ===============================================================
  98. ;       dir lv control buttons
  99. ; ===============================================================
  100.  
  101. XBUTTON 212 0 20 12 "P"
  102.    gadid 50
  103.    lvuse #this 1
  104.    lvdir parent
  105.    setwintitle #this '$$lv.dir'
  106.  
  107. XBUTTON 212 12 20 12 "D"
  108.    gadid 50
  109.    lvuse #this 1
  110.    lvdir disks
  111.    setwintitle #this 'Disks'
  112.  
  113. XBUTTON 212 24 20 12 "S"
  114.    gadid 50
  115.    lvuse #this 1
  116.    if $selswitch = 1
  117.       lvdir all
  118.       selswitch = 0
  119.    else
  120.       lvdir none
  121.       selswitch = 1
  122.    endif
  123.  
  124. XBUTTON 212 44 20 12 "X"
  125.     gadhelp                                'Delete selected files'
  126.     gadid 50
  127.     lvuse #this 1
  128.     lvaction delete ask
  129.  
  130. ; ===============================================================
  131. ;       dir lv - add selected
  132. ; ===============================================================
  133.  
  134. XBUTTON 212 64 20 12 +
  135.     gadhelp                                'Add selected to list'
  136.    gadid 50
  137.    lvuse gcsound.gc 1
  138.    lvmulti first
  139.    while $$lv.line > ''            ; skip dirs
  140.    and $$lv.type == DIR
  141.       lvmulti next
  142.    endwhile
  143.    while $$lv.line > ''            ; skip dirs
  144.       if $file H= 'FORM????8SVX'
  145.          lvuse gcsound.gc 10
  146.          lvsearch '$file' ci first ; avoid duplicate entries
  147.          if $$lv.line = ''
  148.             extract file file fname
  149.             rec = '                              '
  150.             rec[0][30] = $fname
  151.             appvar rec '0 64 -1 $file'
  152.             lvadd $rec
  153.          endif
  154.          lvuse gcsound.gc 1
  155.       endif
  156.       lvmulti off
  157.       lvmulti next
  158.    endwhile
  159.  
  160. ; ===============================================================
  161. ;       dir lv - switch to samples lv
  162. ; ===============================================================
  163.  
  164. XBUTTON 212 76 20 16 "Ok"
  165.    gadid 50
  166.    gcsound.gc/mode = SAMPLE
  167.    setgad gcsound.gc 10 SHOW               ; show the samples lv
  168.    setgad gcsound.gc 2 SHOW                ; show the textin gad
  169.    setgad gcsound.gc 1  HIDE               ; hide dir lv
  170.    setgad gcsound.gc 50  HIDE              ; hide all dir lv gads
  171.    redraw gcsound.gc
  172.    setwintitle gcsound.gc 'GCSound 8SVX player'
  173.  
  174. ; ===============================================================
  175. ;       Select lv - buttons
  176. ; ===============================================================
  177.  
  178. XBUTTON 212 0 20 12 "<"
  179.    Gadhelp                       'Select samples'
  180.    gadid 2
  181.    gosub gcsound.pop dirmode
  182.  
  183. XBUTTON 212 16 20 12 "P"
  184.    Gadhelp                       'Play selected samples'
  185.    gadid 2
  186.    gosub gcsound.pop playsamp
  187.  
  188. XBUTTON 212 28 20 12 "?"
  189.    Gadhelp                       'Adjust sample'
  190.    gadid 2
  191.    lvuse gcsound.gc 10
  192.    lvmulti first
  193.    if $$lv.line > '' 
  194.       gosub gcsound.set settings '$gcsound.gc/sample'
  195.    endif
  196.  
  197. XBUTTON 212 44 20 12 "U"
  198.    Gadhelp                       'Unload all samples'
  199.    gadid 2
  200.    lvuse gcsound.gc 10
  201.    lvmulti all
  202.    setgad gcsound.gc 10 HIDE
  203.    guiwindow gcsound.gc wait
  204.    gosub gcsound.pop unload
  205.    setgad gcsound.gc 10 SHOW
  206.    guiwindow gcsound.gc resume
  207.    lvmulti none
  208.  
  209. XBUTTON 212 56 20 12 "R"
  210.    Gadhelp                       'Remove selected from list'
  211.    gadid 2
  212.    gosub gcsound.pop remove
  213.  
  214. XBUTTON 212 72 20 12 "L"
  215.    Gadhelp                       'Load new list'
  216.    gadid 2
  217.    local loadname
  218.    loadname = ''
  219.    ReqFile -1 -1 300 -40 'Load list:' SAVE loadname #$prefs
  220.    if $loadname > ''
  221.       lvuse #this 10
  222.       lvchange $loadname
  223.       prefs = $loadname
  224.    endif
  225.  
  226. XBUTTON 212 84 20 12 "S"
  227.    Gadhelp                       'Save list'
  228.    gadid 2
  229.    local savename
  230.    savename = ''
  231.    ReqFile -1 -1 300 -40 'Save list:' SAVE savename #$prefs
  232.    if $savename > ''
  233.       lvuse #this 10
  234.       lvsave $savename
  235.    endif
  236.  
  237. ; ===============================================================
  238. ;       ROUTINE - Split the line into it's components
  239. ; ===============================================================
  240.  
  241. xRoutine splitline line
  242.    ; split the line into it's components
  243.  
  244.    origline = '$line'   ; store original line
  245.    parsevar line
  246.  
  247.    ; get name & mode
  248.    name = $$parse.0
  249.    if $name[0][5] = ''
  250.       status = LOAD
  251.       name = $name[5]
  252.    elseif $name[0][7] = ''
  253.       status = PLAY
  254.       name = $name[7]
  255.    else
  256.       status = IDLE
  257.    endif
  258.    extract name clean name
  259.  
  260.    times  = $$parse.1
  261.    extract times clean times
  262.    volume = $$parse.2
  263.    extract volume clean volume
  264.    speed  = $$parse.3
  265.    extract speed clean speed
  266.    path = $$parse.4
  267.    extract path clean path
  268.  
  269.    if $setwin = OPEN
  270.       gosub gcsound.set initsetgads
  271.    endif
  272.  
  273. ; ===============================================================
  274. ;       ROUTINE - Join the line & put it back in the list
  275. ; ===============================================================
  276.  
  277. xRoutine joinline
  278.    rec = '                              '
  279.    rec[0][30] = $name
  280.    appvar rec '$times $volume $speed $path'
  281.  
  282.    ; add esc seq
  283.    if $status = PLAY
  284.       rec = '$rec'
  285.    elseif $status = LOAD
  286.       rec = '$rec'
  287.    endif
  288.  
  289. ; ===============================================================
  290. ;       ROUTINE - find line place & put it
  291. ; ===============================================================
  292.  
  293. xRoutine putline
  294.    ; look for old line & replace it
  295.  
  296.    lvuse gcsound.gc 10
  297.    lvsearch '$path' ci first
  298.    if $$lv.line > ''
  299.       lvput '$rec'
  300.    else
  301.       ezreq 'Sample $name was removed!' OK ''
  302.    endif
  303.  
  304.  
  305. ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  306. ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  307. ; ###############################################################
  308.  
  309.         NEWFILE gcsound.pop     ; pop-up on RMB - SAMPLE mode
  310.  
  311. ; ###############################################################
  312. ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  313. ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  314.  
  315. WinBig 0 0 80 120 ""
  316. WinType 00001000
  317. winonmouse 30 22 
  318. varpath gcsound.gc
  319.  
  320. xOnRMB 
  321. guiclose #this
  322.  
  323. xOnInactive
  324. guiclose #this
  325.  
  326. ; ===============================================================
  327. ;       Change to dir lv
  328. ; ===============================================================
  329.  
  330. XBUTTON 0 0 0 15 "<< Select"
  331. guiclose #this
  332. gosub #this dirmode
  333.  
  334. xRoutine dirmode              ; also called from button
  335. setgad gcsound.gc 1  SHOW
  336. setgad gcsound.gc 50  SHOW
  337. setgad gcsound.gc 10 HIDE
  338. setgad gcsound.gc 2 HIDE
  339. redraw gcsound.gc
  340. gcsound.gc/mode = DIR
  341. lvuse gcsound.gc 1
  342. setwintitle gcsound.gc '$$lv.dir'
  343. lvuse gcsound.gc 10
  344. lvmulti all
  345. gosub gcsound.pop abort    ; abort all playing sounds
  346.  
  347. ; ===============================================================
  348. ;       Play selected sample
  349. ; ===============================================================
  350.  
  351. XBUTTON 0 15 0 15 "Play"
  352. gadhelp 'Play first selected samples'
  353. guiclose #this
  354. gosub gcsound.pop playsamp
  355.  
  356. XRoutine playsamp
  357. lvuse gcsound.gc 10
  358. lvmulti first
  359. while $$lv.line > ''
  360.    gosub gcsound.gc splitline '$sample'
  361.    if $status = LOAD
  362.       call gcsound play $name $times $volume $speed
  363.       status = PLAY
  364.       gosub gcsound.gc joinline
  365.       lvput '$rec'
  366.    elseif $status = IDLE
  367.       call gcsound load $path $name
  368.       call gcsound play $name $times $volume $speed
  369.       status = PLAY
  370.       gosub gcsound.gc joinline
  371.       lvput '$rec'
  372.    endif
  373.    if $$retcode > 0     ; error = audio is full
  374.       lvmulti none
  375.       stop
  376.    endif
  377.    lvmulti off
  378.    lvmulti next
  379. endwhile
  380. lvsort ASC
  381.  
  382. ; ===============================================================
  383. ;       stop current/All sample
  384. ; ===============================================================
  385.  
  386. XBUTTON  0 30 60 15 "Stop"
  387. gadhelp 'Abort selected sample'
  388. guiclose #this
  389. lvuse gcsound.gc 10
  390. gosub #this abort
  391.  
  392. xroutine abort  ; also used below
  393. lvmulti first
  394. while $$lv.line > ''
  395.    if $sample[4][1] = ';'
  396.       gosub gcsound.gc splitline '$sample'
  397.       call gcsound stop $name
  398.       status = LOAD
  399.       gosub gcsound.gc joinline
  400.       lvput '$rec'   ; set plain white
  401.    endif
  402.    lvmulti off
  403.    lvmulti next
  404. endwhile
  405.  
  406. XBUTTON 60 30 20 15 "A"         ; stop all samples
  407. gadhelp 'Abort all samples'
  408. guiclose #this
  409. lvuse gcsound.gc 10
  410. lvmulti all
  411. setgad gcsound.gc 10 HIDE       ; for speed
  412. guiwindow gcsound.gc wait
  413. gosub #this abort
  414. setgad gcsound.gc 10 SHOW
  415. guiwindow gcsound.gc resume
  416. lvmulti none
  417.  
  418. ; ===============================================================
  419. ;       UnLoad selected samples
  420. ; ===============================================================
  421.  
  422. XBUTTON 0 45 60 15 "Unload"
  423. gadhelp 'Unload selected samples from memory'
  424. guiclose #this
  425. lvuse gcsound.gc 10
  426. gosub #this unload
  427.  
  428. xRoutine unload
  429. lvmulti first
  430. while $$lv.line > ''
  431.    if $sample[0][1] = ''       ; if loaded or playing   
  432.       gosub gcsound.gc splitline '$sample'
  433.       call gcsound unload $name
  434.       status = IDLE
  435.       gosub gcsound.gc joinline
  436.       lvput '$rec'  ; put here for speed
  437.    endif
  438.    lvmulti off
  439.    lvmulti next
  440. endwhile
  441.  
  442. XBUTTON 60 45 20 15 "A"         ; unload all samples
  443. gadhelp 'Abort all samples'
  444. guiclose #this
  445. lvuse gcsound.gc 10
  446. lvmulti all
  447. setgad gcsound.gc 10 HIDE       ; for speed
  448. guiwindow gcsound.gc wait
  449. gosub #this unload
  450. setgad gcsound.gc 10 SHOW
  451. guiwindow gcsound.gc resume
  452. lvmulti none
  453.  
  454. ; ===============================================================
  455. ;       Load selected samples
  456. ; ===============================================================
  457.  
  458. XBUTTON 0 60 0 15 "Load"
  459. gadhelp 'Load selected samples into memory for fast starting..'
  460. guiclose #this
  461. lvuse gcsound.gc 10
  462. lvmulti first
  463. while $$lv.line > ''
  464.    gosub gcsound.gc splitline '$sample'
  465.    if $status = IDLE
  466.       call gcsound load '$path' '$name'
  467.       lvput '$sample'
  468.    endif
  469.    lvmulti off
  470.    lvmulti next
  471. endwhile
  472.  
  473.  
  474. ; ===============================================================
  475. ;       Settings
  476. ; ===============================================================
  477.  
  478. XBUTTON 0 75 0 15 "Settings"
  479. lvuse gcsound.gc 10
  480. lvmulti first
  481. if $$lv.line > '' 
  482.    gosub gcsound.set settings '$gcsound.gc/sample'    ; set vol, speed etc
  483. endif
  484.  
  485. ; ===============================================================
  486. ;       remove sample
  487. ; ===============================================================
  488.  
  489. XBUTTON 0 90 0 15 "Remove"
  490. gadhelp 'Unload and remove selected samples from list'
  491. guiclose #this
  492. gosub #this remove
  493.  
  494. xroutine remove
  495. lvuse gcsound.gc 10
  496. lvmulti first
  497. while $$lv.line > ''
  498.    if $sample[0][1] = ''
  499.       gosub gcsound.gc splitline '$sample'
  500.       call gcsound unload $name
  501.    endif
  502.    lvdel -1
  503.    lvmulti next
  504. endwhile
  505.  
  506. ; ===============================================================
  507. ;       quit
  508. ; ===============================================================
  509.  
  510. XBUTTON 0 105 0 15 "Quit"
  511. gadhelp 'Stop all sounds and quit'
  512. guiclose #this
  513. ezreq 'Quit GCSound ?' Quit|CANCEL choice
  514. if $choice = 1
  515.    GuiQuit gcsound.gc
  516. endif
  517.  
  518.  
  519. ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  520. ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  521. ; ###############################################################
  522.  
  523.         NEWFILE gcsound.set     ; pop-up on dblclk - SAMPLE mode
  524.  
  525. ; ###############################################################
  526. ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  527. ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  528.  
  529. WINBIG 26 32 302 88 gcsound.set
  530. WinType 11110001
  531. varpath gcsound.gc
  532. BOX 0 0 0 0 out button
  533.  
  534. xOnOpen
  535. setwin = OPEN
  536.  
  537. xOnClose
  538. setwin = CLOSED
  539.  
  540. ; ===============================================================
  541. ;       the routine that gets called
  542. ; ===============================================================
  543.  
  544. xroutine settings sample
  545. guiopen #this
  546. setgad #this 43 on              ; set on play button (if it was off)
  547.  
  548. gosub gcsound.gc splitline '$sample'
  549.  
  550. if $status != LOAD              ; play button
  551.    setgad #this 43 OFF
  552. endif
  553.  
  554. ; if sample is loaded, get actual values
  555. if $status != IDLE
  556.    call gcsound info $name
  557.    info = $$call.ret
  558.    cutvar info cut word 1 volume
  559.    extract volume clean volume
  560.    extract info clean speed
  561. endif
  562. gosub #this initsetgads
  563.  
  564.  
  565. xRoutine initsetgads    ; also called from gcsound.gc
  566. update #this 2 $times
  567. update #this 1 $volume
  568. update #this 3 $speed
  569. update #this 31 $speed
  570. setwintitle #this '$name'
  571.  
  572. ; init speed gads
  573. if $speed = -1
  574.    update #this 32 1
  575.    setgad #this 3  OFF
  576.    setgad #this 31 OFF
  577.    usedef = ON
  578. else
  579.    update #this 32 0
  580.    setgad #this 31 ON
  581.    setgad #this 3  ON
  582.    usedef = OFF
  583. endif
  584.  
  585. ; ===============================================================
  586. ;       volume
  587. ; ===============================================================
  588.  
  589. CTEXT 15 3 "Volume (0-64):" #screen 8 2 0 "0001"
  590. XHSLIDER 9 15 254 12 "" volume 0 64 64 "%ld"
  591. gadid 1
  592. call gcsound volume $name $volume
  593. gosub gcsound.gc joinline
  594. gosub gcsound.gc putline
  595.  
  596. ; ===============================================================
  597. ;       times (doesn't work well yet..)
  598. ; ===============================================================
  599.  
  600. CTEXT 15 27 "Times (0=forever):" #screen 8 2 0 "0001"
  601. XHSLIDER 9 39 254 12 "" times 0 100 0 "%ld"
  602. gadid 2
  603. call gcsound times $name $times
  604. gosub gcsound.gc joinline
  605. gosub gcsound.gc putline
  606.  
  607. ; ===============================================================
  608. ;       speed
  609. ; ===============================================================
  610.  
  611. CTEXT 15 57 "Speed:" #screen 8 2 0 "0001"
  612.  
  613. ; ============== textin gad
  614.  
  615. XTEXTIN 69 54 83 14 "" speed "214" 100
  616. gadid 31
  617. if $speed > 124
  618. and $speed < 301
  619.     setgad #this 3 ON
  620.     update #this 3 $speed
  621. else
  622.     setgad #this 3 OFF
  623. endif
  624. call gcsound speed $name $speed
  625. gosub gcsound.gc joinline
  626. gosub gcsound.gc putline
  627.  
  628. ; ============== checkbox
  629.  
  630. XCHECKBOX 234 57 26 11 "Default" usedef ON OFF ON
  631. gadid 32
  632. if $usedef = ON
  633.    oldspeed = $speed
  634.    speed = -1
  635.    call gcsound speed $name -1
  636.    setgad #this 3 OFF           ; set slider off        
  637.    setgad #this 31 OFF          ; set textin off        
  638. else 
  639.    speed = $oldspeed
  640.    call gcsound speed $name $speed
  641.    setgad #this 3 ON            ; set slider on 
  642.    setgad #this 31 ON           ; set textin on
  643. endif
  644. gosub gcsound.gc joinline
  645. gosub gcsound.gc putline
  646.  
  647. ; ============== slider
  648.  
  649. XHSLIDER 9 69 254 12 "" speed 125 300 214 "%ld"
  650. gadid 3
  651. update #this 31 $speed
  652. call gcsound speed $name $speed
  653. gosub gcsound.gc joinline
  654. gosub gcsound.gc putline
  655.  
  656.  
  657.  
  658.  
  659.